CPL
Я только сейчас начинаю понимать задвиги Хагино и его концепт. Удобный в
принципе теоретический инструмент для исследования категорий. В порядке
актуальности: SECD, CAM, CPL, OM :-) Надо построить такую же машину для LCCC и
инфинити топоса.
Бутстреп Декартово Замкнутой Категории и NNO:
cpl>
right object 1 with !
end object;
right object 1 defined
cpl>edit
right object prod(a,b) with pair is
pi1: prod -> a
pi2: prod -> b
end object;
right object prod(+,+) defined
cpl>edit
right object exp(a,b) with curry is
eval: prod(exp,a) -> b
end object;
right object exp(-,+) defined
cpl>edit
left object nat with pr is
0:1->nat
s: nat -> nat
end object;
left object nat defined
cpl>edit
left object coprod(a,b) with case is
in1: a -> coprod
in2: b -> coprod
end object;
left object coprod(+,+) defined
cpl>
Бутстреп пары:
cpl>set trace on
cpl>simp eval.pair(pr(curry(pi2),curry(s.eval)).pi1,pi2).pair(s.0,s.0)
0:eval.pair(pr(curry(pi2),curry(s.eval)).pi1,pi2).pair(s.0,s.0)*
1:eval.pair(pr(curry(pi2),curry(s.eval)).pi1,pi2)*pair(s.0,s.0)
2:eval*pair(pr(curry(pi2),curry(s.eval)).pi1,pi2).pair(s.0,s.0)
3[1]:pr(curry(pi2),curry(s.eval)).pi1*pair(s.0,s.0)
4[1]:pr(curry(pi2),curry(s.eval)).s.0*id
5[1]:pr(curry(pi2),curry(s.eval)).s*0
6[1]:pr(curry(pi2),curry(s.eval))*s.0
7[1]:curry(s.eval).pr(curry(pi2),curry(s.eval))*0
8[1]:curry(s.eval).curry(pi2).!*
9[1]:curry(s.eval).curry(pi2)*!
10[1]:curry(s.eval)*curry(pi2).!
11[1]:*curry(s.eval).curry(pi2).!
12:s.eval*pair(curry(pi2).!,pi2.pair(s.0,s.0))
13[1]:curry(pi2).!*
14[1]:curry(pi2)*!
15[1]:*curry(pi2).!
16:s.pi2*pair(!,pi2.pair(s.0,s.0))
17:s.pi2.pair(s.0,s.0)*id
18:s.pi2*pair(s.0,s.0)
19:s.s.0*id
20:s.s*0
21:s*s.0
22:*s.s.0
s.s.0
:1 -> nat
cpl>
Факториальчик:
cpl>let mult=eval.prod(pr(curry(0.!),curry(add.pair(eval,pi2))),id)
mult : prod(nat,nat) -> nat defined
cpl>let fact=pi1.pr(pair(s.0,0),pair(mult.pair(s.pi2,pi1),s.pi2))
fact : nat -> nat defined
cpl>simp mult.pair(s.s.0,s.s.s.0)
s.s.s.s.s.s.0
:1 -> nat
cpl>simp fact.s.s.s.s.0
s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.0.!
:1 -> nat
cpl>